/**
 * 
 */
package com.whf15.o2o.service.impl;

import java.util.Date;

import org.apache.tomcat.util.security.MD5Encoder;
import org.eclipse.jdt.internal.compiler.env.ISourceMethod;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.whf15.o2o.dao.LocalAuthDao;
import com.whf15.o2o.dto.LocalAuthExecution;
import com.whf15.o2o.entity.LocalAuth;
import com.whf15.o2o.enums.LocalAuthStateEnum;
import com.whf15.o2o.exceptions.LocalAuthOperationException;
import com.whf15.o2o.service.LocalAuthService;
import com.whf15.o2o.util.MD5;

/**   
* 项目名称：o2o   
* 类名称：LocalAuthServiceImpl   
* 类描述：   
* @version 
* @author whfo 
* @date 2021年9月3日 下午3:10:58        
*/
@Service
public class LocalAuthServiceImpl implements LocalAuthService{
	@Autowired
	private LocalAuthDao localAuthDao;
	
	
	/**
	* 方法描述：
	* @author whfo 
	* @date 2021年9月3日 下午3:11:38 
	* @version 
	*/
	@Override
	public LocalAuth getLocalAuthByUsernameAndPwd(String username, String password) {
		// TODO Auto-generated method stub
		return localAuthDao.queryLocalByUserNameAndPwd(username, MD5.getMd5(password));
	}

	/**
	* 方法描述：
	* @author whfo 
	* @date 2021年9月3日 下午3:11:38 
	* @version 
	*/
	@Override
	public LocalAuth getLocalAuthByUserId(long userId) {
		// TODO Auto-generated method stub
		return localAuthDao.queryLocalByUserId(userId);
	}

	/**
	* 方法描述：
	* @author whfo 
	* @date 2021年9月3日 下午3:11:38 
	* @version 
	*/
	@Override
	@Transactional
	public LocalAuthExecution bingLocalAuth(LocalAuth localAuth) throws LocalAuthOperationException {
		//空值判断，传入的localAuth账号密码，用户信息特别时userId不能为空，否则直接返回错误
		if(localAuth == null || localAuth.getPassword() == null || localAuth.getUsername() == null
				|| localAuth.getPersonInfo() == null || localAuth.getPersonInfo().getUserId() == null) {
			return new LocalAuthExecution(LocalAuthStateEnum.NULL_AUTH_INFO);
		}
		//查询此用户是否已绑定过平台账号
		LocalAuth tempAuth = localAuthDao.queryLocalByUserId(localAuth.getPersonInfo().getUserId());
		if(tempAuth != null) {
			//如果绑定过则直接退出，以保证平台账号的唯一性
			return new LocalAuthExecution(LocalAuthStateEnum.ONLY_ONE_ACCOUNT);
		}
		
		try {
			//如果之前没有胖丁过平台账号则创建一个平台账号与该用户绑定
			localAuth.setCreateTime(new Date());
			localAuth.setLastEditTime(new Date());
			//对密码进行MD5加密码
			localAuth.setPassword(MD5.getMd5(localAuth.getPassword()));
			int effectedNum = localAuthDao.insertLocalAuth(localAuth);
			//判断创建是否成功
			if(effectedNum <= 0 ) {
				throw new LocalAuthOperationException("账号绑定失败");
				
			}else {
				return new LocalAuthExecution(LocalAuthStateEnum.SUCCESS,localAuth);
			}
		} catch (Exception e) {
			// TODO: handle exception
			throw new LocalAuthOperationException("insertLocalAuth error:" + e.getMessage());
		}
	}
	/**
	* 方法描述：
	* @author whfo 
	* @date 2021年9月3日 下午3:11:38 
	* @version 
	*/
	@Override
	public LocalAuthExecution modifyLocalAuth(Long userId, String username, String password, String newpassword)
			throws LocalAuthOperationException {
		//非空判断，判断传入的用户id,账号，新旧密码是否相同，若不满足条件则返回错误信息
		if(userId != null && username != null && password != null && newpassword !=null
				&& !password.equals(newpassword)) {
			try {
				//更新密码，并对新密码进行MD5加密
				int effectedNum = localAuthDao.updateLocalAuth(userId, username, MD5.getMd5(password), MD5.getMd5(newpassword), new Date());
				//判断更新是否成功
				if(effectedNum <= 0) {
					throw new LocalAuthOperationException("更新密码失败");
				}
				return new LocalAuthExecution(LocalAuthStateEnum.SUCCESS);
			} catch (Exception e) {
				throw new LocalAuthOperationException("更新密码失败："+e.toString());
			}
		}else {
			return new LocalAuthExecution(LocalAuthStateEnum.NULL_AUTH_INFO);
		}
	}

}
